#include <bits/stdc++.h>
#define ll long long
using namespace std;

const int Maxn=3010;
int n,m;
char S[Maxn][Maxn];

int rt[Maxn][Maxn],ut[Maxn][Maxn],lt[Maxn][Maxn],dn[Maxn][Maxn];
int num1[Maxn][Maxn],num2[Maxn][Maxn],op[Maxn];

ll solve(int l1,int r1,int l2,int r2){
	if(l1==r1 and l2==r2) return 0;
	for(int i=l1-1;i<=r1+1;i++)
		for(int j=l2-1;j<=r2+1;j++)
			num1[i][j]=num2[i][j]=0;

	ll ret=0;
	if(r1-l1+1>=r2-l2+1){
		int mid=(l1+r1)>>1;
	
		for(int i=l2;i<=r2;i++){
			int nol=0;
			for(int j=l2;j<=r2;j++) op[j]=0;
			for(int j=mid;j>=l1;j--){
				if(S[j][i]!=S[mid][i]) break;
				op[i+rt[j][i]]++;
				nol+=(rt[j][i]>0);
			}
			for(int j=i+1;j<=r2;j++){
				if(ut[mid][j]>=ut[mid][i])
					num1[i][j]=num1[j][i]=nol; 
				nol-=op[j];
			} nol=0;
			
			// upright
			for(int j=l2;j<=r2;j++) op[j]=0;
			for(int j=mid;j>=l1;j--){
				if(S[j][i]!=S[mid][i]) break;
				op[i-lt[j][i]]++;
				nol+=(lt[j][i]>0);
			}
			for(int j=i-1;j>=l2;j--){
				if(ut[mid][j]>=ut[mid][i])
					num1[i][j]=num1[j][i]=nol; 
				nol-=op[j];
			} nol=0;
			// upleft
			for(int j=l2;j<=r2;j++) op[j]=0;
			for(int j=mid+1;j<=r1;j++){
				if(S[j][i]!=S[mid][i]) break;
				op[i+rt[j][i]]++;
				nol+=(rt[j][i]>0);
			}
			for(int j=i+1;j<=r2;j++){
				if(dn[mid][j]>=dn[mid][i])
					num2[i][j]=num2[j][i]=nol; 
				nol-=op[j];
			} nol=0;
			// dnright
			for(int j=l2;j<=r2;j++) op[j]=0;
			for(int j=mid+1;j<=r1;j++){
				if(S[j][i]!=S[mid][i]) break;
				op[i-lt[j][i]]++;
				nol+=(lt[j][i]>0);
			}
			
			for(int j=i-1;j>=l2;j--){
				if(dn[mid][j]>=dn[mid][i])
					num2[i][j]=num2[j][i]=nol; 
				nol-=op[j];
			} nol=0;
			// dnleft
		}
		
		for(int i=l2;i<=r2;i++)
			for(int j=i+1;j<=r2;j++)
				ret+=1ll*num1[i][j]*num2[i][j];
//		if(l1==1 and r1==3 and l2==1 and r2==3){
//			for(int i=l2;i<=r2;i++,puts(""))
//				for(int j=i+1;j<=r2;j++)
//					cout<<i<<" "<<j<<" "<<num1[i][j]<<" "<<num2[i][j]<<"\n";
////					ret+=num1[i][j]*num2[i][j];
//		}
		
//		cout<<"hel "<<l1<<" "<<r1<<" "<<l2<<" "<<r2<<" "<<mid<<" "<<ret<<"\n";
		
		return solve(l1,mid,l2,r2)+
			   solve(mid+1,r1,l2,r2)+ret;
	}
	else{
		int mid=(l2+r2)>>1;
		
		for(int i=l1;i<=r1;i++){
			int nol=0;
			for(int j=l1;j<=r1;j++) op[j]=0;
			for(int j=mid;j>=l2;j--){
				if(S[i][j]!=S[i][mid]) break;
				op[i+dn[i][j]]++;
				nol+=(dn[i][j]>0);
			}
			for(int j=i+1;j<=r1;j++){
				if(lt[j][mid]>=lt[i][mid])
					num1[i][j]=num1[j][i]=nol; 
				nol-=op[j];
			} nol=0;
			// leftdn
			for(int j=l1;j<=r1;j++) op[j]=0;
			for(int j=mid;j>=l2;j--){
				if(S[i][j]!=S[i][mid]) break;
				op[i-ut[i][j]]++;
				nol+=(ut[i][j]>0);
			}
			for(int j=i-1;j>=l1;j--){
				if(lt[j][mid]>=lt[i][mid])
					num1[i][j]=num1[j][i]=nol; 
				nol-=op[j];
			} nol=0;
			// leftup
			for(int j=l1;j<=r1;j++) op[j]=0;
			for(int j=mid+1;j<=r2;j++){
				if(S[i][j]!=S[i][mid]) break;
				op[i+dn[i][j]]++;
				nol+=(dn[i][j]>0);
			}
			for(int j=i+1;j<=r1;j++){
				if(rt[j][mid]>=rt[i][mid])
					num2[i][j]=num2[j][i]=nol; 
				nol-=op[j];
			} nol=0;
			// rightdn
			for(int j=l1;j<=r1;j++) op[j]=0;
			for(int j=mid+1;j<=r2;j++){
				if(S[i][j]!=S[i][mid]) break;
				op[i-ut[i][j]]++;
				nol+=(ut[i][j]>0);
			}
			for(int j=i-1;j>=l1;j--){
				if(rt[j][mid]>=rt[i][mid])
					num2[i][j]=num2[j][i]=nol; 
				nol-=op[j];
			} nol=0;
			// rightup
		}
		
		for(int i=l1;i<=r1;i++)
			for(int j=i+1;j<=r1;j++)
				ret+=1ll*num1[i][j]*num2[i][j];
		
//		cout<<"toh "<<l1<<" "<<r1<<" "<<l2<<" "<<r2<<" "<<mid<<" "<<ret<<"\n";
		
		return solve(l1,r1,l2,mid)+
			   solve(l1,r1,mid+1,r2)+ret;
	}
}

int main(){
	freopen("star.in","r",stdin);
	freopen("star.out","w",stdout); 

	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);

	cin>>n>>m;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			cin>>S[i][j];
	for(int i=1;i<=n;i++){
		for(int j=m;j;j--){
			if(S[i][j]==S[i-1][j]) ut[i][j]=ut[i-1][j]+1;
			if(S[i][j]==S[i][j+1]) rt[i][j]=rt[i][j+1]+1;
		}
	}
	for(int i=n;i;i--)
		for(int j=1;j<=m;j++){
			if(S[i][j]==S[i+1][j]) dn[i][j]=dn[i+1][j]+1;
			if(S[i][j]==S[i][j-1]) lt[i][j]=lt[i][j-1]+1;
		}
	
	printf("%lld\n",solve(1,n,1,m));

	return 0;
}
/*
3 4
aaaa
aaba
aaaa

5 6
aaaaaa
abaaca
aaaaaa
aazzaa
aazzaa

*/
